#include "../game.h"
#include "pjas.h"
#include "lopare.h"

/*---------------------------------

Lopare::Lopare( bool spelare, short x, short y )
virtual
Konstruktor, sätter bild och typ

---------------------------------*/

Lopare::Lopare( bool spelare, short x, short y ) : Pjas(spelare, x, y) {
    bild = video.loadImage( spelare == VIT ? "vit_lopare.bmp" : "svart_lopare.bmp" );
    typ = LOPARE;
}

/*---------------------------------

Lopare::mojligtDrag( short x, short y )
overloaded virtual
Detta är lite fulhackat för att låta damen
kastas till Lopare och köra löparens mojligtDrag
(se funktionen md nedan)
Argument: positionen x,y

---------------------------------*/

bool Lopare::mojligtDrag( short x, short y ) {
    return md( x, y );
}

/*---------------------------------

Lopare::md( short x, short y )
Som en vanlig moojligtDrag;
kollar om löparen kan gå till x,y
Argument: positionen x,y

---------------------------------*/

bool Lopare::md( short x, short y ) {
    int pjaserMellan = 0;

	// Om det finns en pjäs på x,y och den är av samma spelare som this, kan den inte gå dit
    if( game->pjasArray[x][y] != NULL && game->pjasArray[x][y]->spelare == spelare ) {
        return 0;
    }

	// Löparen måste gå lika många steg upp/ned som höger/vänster
    if( ((abs(x-xpos)) - (abs(y-ypos))) == 0 ) {

        if( x > xpos && y > ypos ) {
            int yPos = y;
            for( int xPos = x; xPos > xpos; xPos-- ) {
                if( game->pjasArray[xPos][yPos] != NULL ) {
                    pjaserMellan++;
                }
                yPos--;
            }
        }
        else if( x > xpos && y < ypos ) {
            int yPos = y;
            for( int xPos = x; xPos > xpos; xPos-- ) {
                if( game->pjasArray[xPos][yPos] != NULL ) {
                    pjaserMellan++;
                }
                yPos++;
            }
        }
        else if(x < xpos && y < ypos) {
            int yPos = y;
            for( int xPos = x; xPos < xpos; xPos++ ) {
                if( game->pjasArray[xPos][yPos] != NULL ) {
                    pjaserMellan++;
                }
                yPos++;
            }
        }
        else if( x < xpos && y > ypos ) {
            int yPos = y;
            for( int xPos = x; xPos < xpos; xPos++ ) {
                if( game->pjasArray[xPos][yPos] != NULL ) {
                    pjaserMellan++;
                }
                yPos--;
            }
        }

	// Inga pjäser står i vägen
    if( pjaserMellan == 0 ) {
        return 1;
    }
    // En pjäs är i vägen, men den tillhör spelaren, så den kan tas
    else if( pjaserMellan == 1 && game->pjasArray[x][y] != NULL && game->pjasArray[x][y]->spelare != spelare) {
        return 1;
        }
    }
    return 0;
}
